#include "./subDirectory/sub.h"
#include <stdint.h>
#ifdef WINDOWS
#define EXPORT_API extern "C" __declspec(dllexport)
#else
#define EXPORT_API extern "C"
#endif

enum jaee{
    a,
    b
};

enum subJaee{
    a,
    b
};

enum wNum{
    w1,
    w2 = 100,
    w3,
};

//测试 结构体
struct BigNum
{
    struct insideStc
    {
        float aa;
        int b;
        subJaee cc;
    } is0;

    enum insideEnum{
        a,
        x
    } is1;

    insideEnum ie;
    jaee t;
    unsigned int B1;
    wNum wB;
    float * B2;
    insideStc is1;
    void * xxHd;
};

struct  texture;
struct  mesh;

//函数指针
typedef void (*deleOnExit)();
typedef void (*deleOnWinRender)(int winid);
typedef char16_t* (*deleOnWinRenderaad)(char16_t* aaa);     //@@@ 有问题 ， 没有处理 unsafe 包层
typedef void (*deleOnLog)(char16_t* msg);                   //@@@ 有问题，unsafe 侧，使用的是 安全委托
typedef int* (*deleErrorFun)(int * ip);


//类型别名
typedef int* Int_Array;
typedef float BFloat;
typedef float *BFloatp;
typedef unsigned long int UInt64;
typedef unsigned long int (UInt64s []);
typedef wNum N_wNum;




//数值 相加
EXPORT_API float voidFun();

EXPORT_API float addNum(float a , float * b = nullptr);

//数值 相减
SUB_EXPORT_API static unsigned int *subNum(float* a , float b = 98){
    
}

//
EXPORT_API float* retFun(int a);

EXPORT_API Int_Array retFun1(int a , int * __retArrLen_out);

EXPORT_API BFloat retFun21(int a);

EXPORT_API BFloatp retFun2(int a);

EXPORT_API N_wNum retFun3(int a);

EXPORT_API void* retFun4(deleErrorFun _fun , uint32_t val);

EXPORT_API char16_t* retFun41(uint32_t val);

EXPORT_API void* retFun5(void * val);

//
EXPORT_API float expBigNum(BigNum::insideStc a);

//打印字符
EXPORT_API texture* printfStr(char16_t* _info , float * num_out ,short * tt_handle , int state);

//打印log 信息
EXPORT_API void printLog(deleOnLog _log , char16_t* _str , deleOnLog _log1, char16_t* _str1 , int * xx_arr, int sta);

//
EXPORT_API void toRender(deleOnWinRenderaad _render);

EXPORT_API mesh* createMesh(char16_t* meshFile);

EXPORT_API void createMeshDel(mesh* mesh);

//
EXPORT_API void toInit(int num , deleOnExit _ren , deleOnWinRender _render);

//数值 相乘
EXPORT_API float mulNum(float a[21] , float *b[6]){

}

//数值 相乘
SUB_EXPORT_API float mulNum1(float *a[12] ,float &b ,float *&c);

//外部 枚举定义导出
EXPORT_API char * WeekMap(week w);

//外部 枚举定义导出
EXPORT_API bool TestFun(enum week w , wNum _num = w2);

//结构体 参数
EXPORT_API BigNum TestStcA(BigNum g , subStc b){

}

EXPORT_API char16_t* repeatStr(char16_t* str ,  char* buf_arr);